package controller.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import model.User;

/**
 * Intercepta las peticiones para comprobar si el usuario tiene o no permiso
 * para ejecutar cualquier acción en función de si está o no registrado y en
 * caso de estarlo, si es o no administrador ("admin").
 */
@WebFilter(filterName = "PermissionFilter", urlPatterns = {"/*"})

public class PermissionFilter implements Filter{
    FilterConfig config;

    public PermissionFilter() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest) request;
        HttpSession s = req.getSession();
        req.setCharacterEncoding("UTF-8");
        User user = (User) s.getAttribute("usuario");
        String usuario = "";
        if (user != null && user.getUsuario() != null)
            usuario = user.getUsuario();
        boolean autorizado = true;
        String form = request.getParameter("form");
        if (form == null)
            form = "";
        String uriReq = req.getRequestURI();
        if (uriReq.contains("deleteForm") || uriReq.contains("deleteUserForm")
                || uriReq.contains("updateForm") || uriReq.contains("updateUserForm")
                || uriReq.contains("displaySales")){
            if (usuario.equals(""))
                autorizado = false;
        }
        if (form.contains("updateServlet") || form.contains("updateUserServlet")
                || form.contains("deleteServlet") || form.contains("deleteUserServlet")
                || form.contains("signOutServlet")){
            if (usuario.equals(""))
                autorizado = false;
        }
        if (autorizado)
            chain.doFilter(request, response);
        else {
            request.setAttribute("sinPermiso", "sinPermiso");
            request.setAttribute("message1", "Faltan permisos:");
            request.setAttribute("message2", "Registrese para disfrutar por completo de appBuy");
            RequestDispatcher dispatcher = req.getServletContext().getNamedDispatcher("frontController");
            dispatcher.forward(request, response);
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = filterConfig;
    }

    public void destroy() {
    }
}

